これ結構苦労しましたww。

いくらHELP探しても英語の3CXのサイトしか出てこんし。
そこはみたっつーの、みたいな。

原因の究明も大変。サーバ問題?クライアントのネットワークの問題か?とか。
それがあって最初はNAT配下に置いていたサーバをグローバルにおくことにしました。
まあ、結果的には設定手順とクライアントのネットワークの問題でしたが。

試行錯誤した結果、以下の手順で行う必要がありそうでした。

1.Google Developer Console https://developers.google.com/console/ で、 “Create Project” で何でもいいのでとりあえずプロジェクトを作成する。ここで作成される「プロジェクトナンバー」が必要になります。
2.メニュータグからAPIマネージャを開き、「
Cloud Messaging for Android」を有効にします。
3.認証情報にて、「新しい認証情報」⇒「APIキー」⇒「ブラウザキー」で、APIキーを作成します。
4.3CXの管理画面の「設定」⇒「Push」で先ほどの「プロジェクトナンバー」と「APIキー」を設定します。
5.3CXの管理画面の「内線」の中から、設定させる内線に対し、「send mail」で設定ファイルを送ります。
6.送られてきた設定ファイルを読み込めばOK。
 ※サーバ側の内線設定で、Pushが有効になってないとだめですよ!!

でした。
ポイント設定する順番。
 1.まずPush設定をする
 2.そのあと、設定ファイルをメールで送り、その設定ファイルでクライアントを設定する
っぽいです。やってみた感じでは。

こんなこと書いてないし。再起動すればいいっぽくしか書いてないし。確かに再設定を最新にとか書いてあるけど・・・。そういう意味なのか?

それでもだめ場合。

疑うのはネットワークの問題。一番大きいのはuPnP←業者談NATテーブルのTTL←自分の経験)
これが原因の場合、LTEおよび3G回線ならうまく着信するはずです。

もしWifi環境などで端末がpushで着信しない場合は、WIFiルータを再起動する、またはルータのuPnP設定がどうなっているかを確認してみましょう。
 →後述してますが、NATテーブルのTTLも要注意!!30分~60分を設定してみましょう。
もしuPnP設定ができない場合は、独自でポートを開けるしかないですね。でも3CXはSTUNでNAT越えができるハズなので、uPnPはあまり関係ないかもしれません。YAMAHAルータで状態をみてますが、uPnPのテーブルには何も表示されないので・・・。
GCMのポートについては以下の内容を参考にするといいと思います。

You need to configure the firewall to allow connectivity with GCM in order for your Android devices to receive messages. The ports that you have to open on your firewall are: 5228, 5229, and 5230 TCP. GCM typically only uses 5228, but ports 5229 and 5230 are also used sometimes. GCM doesn't provide specific IPs, so you should allow your firewall to allow outgoing connections to all IP addresses contained in the IP blocks listed in Google's ASN of 15169.


ちなみに、iOSは試してないです。
自分はAndroidしか持ってないのでww。
おそらく同じでいけると思いますが。
iOSの場合のファイアーウォールの設定は以下のような感じ。ただしバージョン12のヘルプから。

Push providers, iOS devices, and Mac computers are often behind firewalls. To send push notifications, you will need to allow inbound and outbound TCP packets on port 2195. To reach the feedback service, you will need to allow inbound and outbound TCP packets on port 2196. Devices and computers connecting to the push service over Wi-Fi will need to allow inbound and outbound TCP packets through port 5223.

The IP address range for the push service is subject to change. The reason being that providers will connect by hostname, rather than IP address. The push service uses a load balancing scheme that yields a different IP address for the same hostname. However, the entire 17.0.0.0/8 address block is assigned to Apple, so you can specify that range in your firewall rules.


iOS試したらまた追記したいと思いますが、とりあえず3CXのバージョン14では設定項目がないので、設定する必要はないんだろうな、と思っています。



2月4日追記
長時間放置でPushが来ない現象が起こりました。
ルータはYAMAHA RTX-1100です。

調べていくと、GCMは定期的にKeep-Alive通信をしてセッションを保持しているとのこと。
その保持時間は
 WiFi 15分
 モバイル 28分or53分

で、RTX1100のデフォルトは900秒(15分)
うーん、際どい。

なのでNATセッションのタイムアウトを3600秒にしてみました。
あとHTTPは逆に短くしてます。TCPfinについては10秒で切断。
コンフィグはこんな感じ。(ついでにAPNSのも3600秒に
------------------------
nat descriptor timer 1 tcpfin 10
nat descriptor timer 1 protocol=tcp port=www 180
nat descriptor timer 1 protocol=tcp port=5228 3600
nat descriptor timer 1 protocol=tcp port=5229 3600
nat descriptor timer 1 protocol=tcp port=5230 3600
nat descriptor timer 1 protocol=tcp port=2195 3600
nat descriptor timer 1 protocol=tcp port=2196 3600
nat descriptor timer 1 protocol=tcp port=5223 3600
------------------------
とりあえずうまくいってます。