純粋なPythonでAI WhatsAppボットを構築します
このガイドでは、純粋なPythonを使用したMeta(以前のFacebook)クラウドAPIを使用して、Flask Pymessを使用してWhatsAppボットを作成するプロセスをご紹介します。また、WebHookイベントを統合してメッセージをリアルタイムで受信し、OpenAIを使用してAI応答を生成します。 Flaskアプリケーションの構造の詳細については、このドキュメントを参照できます。
前提条件
- メタ開発者アカウント - 持っていない場合は、ここでメタ開発者アカウントを作成できます。
- ビジネスアプリを持っていない場合は、ここでビジネスアプリを作成することを学ぶことができます。ビジネスアプリを作成するオプションが表示されない場合は、その他> [Next] > [ビジネス]を選択してください。
- チュートリアルに従うためのPythonに精通してください。
目次
- 純粋なPythonでAI WhatsAppボットを構築します
- 前提条件
- 目次
- 始めましょう
- ステップ1:電話番号を選択します
- ステップ2:APIでメッセージを送信します
- ステップ3:メッセージを受信するようにWebHookを構成します
- アプリを開始します
- NGROKを起動します
- WhatsAppを統合します
- 統合のテスト
- ステップ4:WebHookセキュリティの理解
- 検証リクエスト
- 検証リクエストの検証
- ペイロードの検証
- ステップ5:APIについて学び、アプリを構築する
- ステップ6:AIをアプリケーションに統合します
- ステップ7:電話番号を追加します
- データルミナ
- チュートリアル
始めましょう
- 概要とセットアップ:ここから旅を始めてください。
- ボットを見つけてください:あなたのボットはここにあります。
- WhatsApp APIドキュメント:公式ドキュメントに精通してください。
- 役立つガイド:メッセージを送信するためのPythonベースのガイドです。
- メッセージを送信するためのAPIドキュメント:このドキュメントをご覧ください。
ステップ1:電話番号を選択します
- WhatsAppがアプリに追加されていることを確認してください。
- 最大5つの番号にメッセージを送信するために使用できるテスト番号から始めます。
- APIセットアップに移動し、メッセージを送信するテスト番号を見つけます。
- ここでは、メッセージを送信するために番号を追加することもできます。独自のWhatsApp番号を入力してください。
- WhatsAppを介して携帯電話でコードを受け取り、番号を確認します。
ステップ2:APIでメッセージを送信します
- APIアクセスセクションから24時間のアクセストークンを取得します。
- ターミナルから送信できる
curlコマンドを使用してメッセージを送信する方法の例を示します。 - それをリクエストライブラリを使用してPython関数に変換しましょう。
-
example.envに基づいて.envファイルを作成し、必要な変数を更新します。ビデオの例はこちら。 - 「Hello World」メッセージが表示されます(メッセージの60〜120秒の遅延を期待してください)。
24時間より長く動作するアクセスを作成します
- METAビジネスアカウントレベルでシステムユーザーを作成します。
- [システムユーザー]ページで、システムユーザーのアセットを構成し、WhatsAppアプリを完全に制御して割り当てます。 [変更の保存]ボタンをクリックすることを忘れないでください。
- こちらのステップ1を参照してください
- こちらのステップ2を参照してください
- 次に、
Generate new tokenをクリックしてアプリを選択し、アクセストークンが有効になる期間を選択します。 60日間を選択するか、期限切れになることはありません。 - WhatsAppのもののみを選択したときにエラーに遭遇していたため、すべてのアクセス許可を選択します。
- アクセストークンを確認してコピーします。
次に、アプリダッシュボードで次の情報を見つける必要があります。
- app_id : "<your-whatsapp-business-app_id>"(アプリダッシュボードで見つかった)
- app_secret : "<your-whatsapp-business-app_secret>"(アプリダッシュボードで見つかった)
- reciontient_waid : ""(これはwhatsapp id、すなわち、電話番号です。テストメッセージの例に示すように、アカウントに追加されていることを確認してください。)
- バージョン:「V18.0」(メタグラフAPIの最新バージョン)
- access_token : ""(前のステップで作成)
最初のメッセージとしてテンプレートタイプメッセージをユーザーに送信することのみができます。だからこそ、私たちが続行する前に最初に返信を送らなければなりません。これを理解するのに2時間かかりました。
ステップ3:メッセージを受信するようにWebHookを構成します
これはこのチュートリアルの最も難しい部分です。
アプリを開始します
- Pythonのインストールまたは環境を持ち、要件をインストールしてください:
pip install -r requirements.txt - run.pyを実行して、フラスコアプリをローカルに実行します
NGROKを起動します
以下の手順は、ngrokドキュメントから取られています。
MetaはNgrokドメインと証明書を検証するため、静的なngrokドメインが必要です!
アプリがLocalHostで正常に実行されたら、ngrokを使用してインターネットで安全に入手しましょう!
- まだngrokユーザーでない場合は、Ngrokに無料でサインアップしてください。
- ngrokエージェントをダウンロードしてください。
- Ngrokダッシュボードに移動し、AuthTokenをクリックして、AuthTokenをコピーします。
- 指示に従って、ngrokエージェントを認証します。これを一度だけする必要があります。
- 左メニューで、クラウドエッジを展開し、[ドメイン]をクリックします。
- [ドメイン]ページで、[ドメイン]または +新しいドメインの作成をクリックします。 (ここで誰もが1つの無料ドメインから始めることができます)
- ローカルデスクトップの端末で次のコマンドを実行して、次のコマンドを実行してngrokを開始します。
ngrok http 8000 --domain your-domain.ngrok-free.app
- Ngrokは、ローカルホストアプリケーションがインターネットに公開されるURLを表示します(Metaで使用するためにこのURLをコピーします)。
WhatsAppを統合します
Meta App Dashboardで、WhatsApp> Configurationに移動し、[編集]ボタンをクリックします。
- 編集webhookのコールバックURLポップアップで、ngrokエージェントが提供するURLを入力して、最後に/webhookを使用して、コールバックURLフィールドのインターネットにアプリケーションを公開します(すなわちhttps://myexample.ngrok-free.app/webhook )。
- 確認トークンを入力してください。この文字列は、WebHookエンドポイントを作成するときにセットアップされます。好きな文字列を選択できます。これ
VERIFY_TOKEN確認してください。 - WhatsAppにWebhookを追加すると、WhatsAppはNgrokを介してアプリケーションに検証POSTリクエストを送信します。 localhostアプリが検証get requestを受信し、端末に
WEBHOOK_VERIFIEDログに受信することを確認します。 - [構成]ページに戻り、[管理]をクリックします。
- Webhookフィールドポップアップで、 [メッセージ]フィールドを[サブスクライブ]をクリックします。ヒント:複数のフィールドを購読できます。
- FlaskアプリとNgrokが実行されている場合、メッセージの横にある「テスト」をクリックしてサブスクリプションをテストできます。あなたは大文字でテストメッセージを受け取ります。その場合、Webhookは正しくセットアップされます。
統合のテスト
WhatsApp製品に関連付けられている電話番号を使用するか、以前にコピーしたテスト番号を使用してください。
- この番号をWhatsAppアプリの連絡先に追加してから、この番号にメッセージを送信します。
- LocalHostアプリがメッセージを受信し、端末にヘッダーとボディの両方を記録することを確認します。
- ボットがあなたに返信するかどうかをテストします。
- ボットを成功して統合しました! ?
- さあ、これでクールなものをactutallyする時が来ました。
ステップ4:WebHookセキュリティの理解
以下は、検証とセキュリティに関するMeta WebHooks APIドキュメントの情報です。すでにコードに実装されていますが、Security.pyで何が起こっているのかをよりよく理解するために参照できます。
検証リクエスト
ソース
アプリダッシュボードでWebHooks製品を構成するときはいつでも、エンドポイントURLにGETリクエストを送信します。検証リクエストには、エンドポイントURLの最後に追加された次のクエリ文字列パラメーターが含まれます。彼らは次のようになります:
GET https://www.your-clever-domain-name.com/webhook?
hub.mode=subscribe&
hub.challenge=1158201444&
hub.verify_token=meatyhamhock
この例の場合のverify_token、 meatyhamhock 、選択できる文字列です。 VERIFY_TOKEN環境変数に保存する限り、それが何であるかは関係ありません。
検証リクエストの検証
ソース
エンドポイントが検証リクエストを受信するときはいつでも、次のことが必要です。
- hub.verify_token値が、アプリダッシュボードでWebHooks製品を構成するときに[トークン]フィールドを確認する文字列と一致することを確認します(このトークン文字列をまだ設定していません)。
- hub.challenge値で応答します。
ペイロードの検証
ソース
WhatsApp署名SHA256署名を使用してすべてのイベント通知ペイロードを署名し、sha256 =が前にあるリクエストのx-hub-signature-256ヘッダーに署名を含めます。ペイロードを検証する必要はありませんが、必要です。
ペイロードを検証するには:
- ペイロードとアプリのアプリの秘密を使用して、SHA256署名を生成します。
- 署名をX-Hub-Signature-256ヘッダー(SHA256 =後のすべて)の署名と比較してください。署名が一致する場合、ペイロードは本物です。
ステップ5:APIについて学び、アプリを構築する
開発者のドキュメントを確認して、アプリを構築する方法を学び、メッセージの送信を開始します。ドキュメントを参照してください。
ステップ6:AIをアプリケーションに統合します
エンドツーエンドの接続ができたので、私たちは大文字で私たちに叫ぶだけで、ボットをもう少し賢くすることができます。あなたがしなければならないのは、whatsapp_utils.pyであなた自身のgenerate_response()関数を思いつくことです。
Cookie Cutterの例が必要な場合は、Openai Assistans APIを検索ツールと統合するには、次の手順に従ってください。
- このビデオをご覧ください:Openaiアシスタントチュートリアル
- OpenAIで独自のアシスタントを作成し、環境変数で
OPENAI_API_KEYとOPENAI_ASSISTANT_ID更新します。 - アシスタントにデータと指示を提供します
- openai_service.pyをユースケースに更新します。
-
generate_reponse whatsapp_utils.pyにインポートします - 新しい
generate_reponse()関数を使用してprocess_whatsapp_message()を更新します。
ステップ7:電話番号を追加します
プロダクションユースケースにアプリを使用する準備ができたら、独自の電話番号を使用してユーザーにメッセージを送信する必要があります。
whatsapp番号にメッセージの送信を開始するには、電話番号を追加します。アカウント情報と電話番号を管理するには、概要ページを参照してください。とwhatsappドキュメント。
WhatsAppの顧客またはビジネスアプリで既に使用されている番号を使用する場合は、その数をビジネスプラットフォームに完全に移行する必要があります。数が移行すると、WhatsAppの顧客またはビジネスアプリへのアクセスが失われます。情報については、既存のWhatsApp番号をビジネスアカウントに移行してください。
電話番号を選択したら、WhatsAppビジネスアカウントに追加する必要があります。電話番号の追加を参照してください。
WhatsApp Business APIを扱い、個人番号に影響を与えずに実験したい場合は、いくつかのオプションがあります。
- 新しいSIMカードを購入します
- 仮想電話番号
- デュアルSIM電話
- 別のデバイスを使用します
- 一時的な番号サービス
- 開発専用のデバイス
推奨事項:これがより長期または専門的な目的のためである場合、仮想電話番号サービスを使用するか、専用デバイス用の新しいSIMカードを購入することをお勧めします。迅速なテストでは、一時的な数で十分かもしれませんが、常にセキュリティとプライバシーに注意してください。数字がWhatsApp Business APIに関連付けられたら、ビジネスAPIからそれを非アクティブ化してデバイスで再現しない限り、デバイス上の通常のWhatsAppでは使用できないことを忘れないでください。
データルミナ
このドキュメントは、Dataluminaから提供されます。私たちは、データアナリスト、エンジニア、科学者が成功したフリーランスビジネスを立ち上げて拡大するのを支援します。私たちが何をしているのかをもっと知りたい場合は、当社のウェブサイトにアクセスして、ニュースレターを購読することができます。このドキュメントをデータの友達や同僚とお気軽に共有してください。
チュートリアル
ビデオチュートリアルについては、YouTubeチャンネル(Youtube.com/@daveebbelaarにアクセスしてください。