Python から WhatsApp を送受信する
受信は、Meta の認証 GET に応答して POST を受け付ける、Web フレームワーク内のルートです。送信は、電話番号の phone number id とトークンを使って Cloud API に HTTPS リクエストを送ります。当社の SDK は不要で、インストールするものもありません。
Meta の認証用 GET とイベント用 POST。これが受信側です。
顧客からメッセージを受けた後、無料テキストを送信できる時間枠です。
その時間枠の外で無料テキストを送信したときに返されるエラーです。
Python でメッセージを受信するには?
すでに使っている任意のフレームワークで、1 つのルートに 2 つのハンドラーを設定します。
GET ハンドラーは Meta の認証に応答します。クエリ文字列から hub.mode、hub.verify_token、hub.challenge を読み取り、トークンを独自のものと照合し、challenge を生のボディとして返します。ここで JSON を返すのが最もよくある間違いで、エラーが表示されないまま失敗します。
POST ハンドラーはイベントを受信します。Meta は遅いレスポンスを失敗とみなして再試行するため、同じメッセージを 2 回処理することになります。すぐに 200 を返してから処理してください。インラインで処理せず、キューに入れるかバックグラウンドタスクに渡します。
メッセージには wamid のメッセージ ID が含まれます。再試行は例外ではなく通常の動作なので、最初からこの ID で重複排除しておく価値があります。
送信するには?
電話番号の phone number id に対する Cloud API の messages エンドポイントへ、ベアラートークン付きで POST を 1 回送ります。
2 つの値は接続情報から取得できます。ダッシュボードに表示されますし、アシスタントに取得させたい場合は get_api_credentials が返します。この呼び出しに当社固有の要素はないため、どの HTTP ライブラリでも利用でき、リクエストは Meta 公式ドキュメントのものとまったく同じです。
タイミングによって変わるのはボディです。顧客の最後のメッセージから 24 時間以内なら、テキストオブジェクトを送信します。時間を過ぎた場合は、承認済みのテンプレートとその言語を指定するテンプレートオブジェクトを送信します。最初の形式しか知らないクライアントはテストでは完全に動作しますが、初めて夜間に届いたメッセージで失敗し、エラー 131047 を返します。
本番用のハンドラーには、これ以外に何が必要ですか?
後から追加するとコストが高く、簡単に見落としやすいことが 3 つあります。
Meta は再試行するため、メッセージ ID で重複排除します。公開状態にする場合はリクエスト署名を検証してください。そうしないと、URL を知っている誰でも POST できます。また、連絡先が最後にメッセージを送ってからどれくらい経ったかで分岐し、人が判断しなくても送信経路がテキストかテンプレートかを選べるようにします。
これらにフレームワークやライブラリは必要ありません。必要なのは集合、チェック、比較です。最初の顧客を迎える前に整えておくことが、静かに動く統合と、対応を求めるアラートが鳴る統合の違いになります。
よくある間違い
- 認証 GET から生の challenge 値ではなく JSON を返す。
- 200 を返す前にインラインで処理する。Meta は遅いレスポンスを再試行するため、メッセージを 2 回処理します。
- 時間枠を確認せずに無料テキストを送信する。131047 が返り、何も起きなかったように見えます。
easycoexistence.com で番号を接続し、Webhook の送信先をルートに設定して、ダッシュボードから phone number id とトークンを取得します。番号 1 件あたり月額 US$ 9 から、利用量に応じて US$ 2 まで。最初の 7 日間は無料です。
よくある質問
Python SDK はありますか?
当社提供のものはありませんが、必要もありません。API は Meta のもので、Meta がドキュメントを提供しており、任意の HTTP ライブラリから利用できます。
どのフレームワークを使うべきですか?
どれでも構いません。必要なのは GET に応答して POST を受け付けるルートで、すべての Python Web フレームワークが対応しています。
メッセージを 2 回処理しないようにするには?
ペイロード内の wamid メッセージ ID で重複排除します。Meta は仕様として再試行するため、これは例外的なケースではなく想定される動作です。
チームは引き続き電話を使えますか?
はい。Coexistence により、同じ番号で WhatsApp Business アプリを使い続けられます。チームが送信した内容は、ハンドラーからエコーイベントとして確認できます。
続きを読む
始める準備はできましたか?
WhatsApp Coexistence の設定は数分で完了し、数か月もかかりません。スマートフォン上のアプリも引き続き使えます。
無料トライアルを始める確認日