連携するアプリケーションの作成を検討する ChatGPT.Telegram で音声メッセージを受信し、それをテキストに変換してChatGPT に転送し、Telegram に応答を返すのがその役割です。作成プロセスでは、以下のステップを踏む必要があります:
- Telegram 用のボットの作成とその基本設定。
- 音声メッセージ付きファイルの受信(Telegram は.oga フォーマットを使用します)。
- oga からmp3 にファイルを変換する。
- mp3 ファイルをボットに転送する。 Whisperサービスを利用してテキストに変換する。
- 受信したテキストをChatGPT に送信する。
- ChatGPT からTelegram のユーザーに応答を送信する .
Telegram 用のボットの作成とその基本設定
すべては、ボットを登録することから始まります。そしてそのために、Telegram 、独自の特別なボットを使用しています。 BotFather.彼に書き込んで、簡単な連続したステップを踏む必要があります。
その結果、ボットへのリンクと、そのAPIへのリクエスト用のトークンを手に入れることができるはずです。
これで、ボットの設定に移ることができます。 AppMaster.これを行う最も簡単な方法は、適切なモジュールをインストールすることです。モジュールのリストでそれを選択し、設定でAPIトークンを指定するだけです。
必要なモデルがプロジェクトに自動的に作成され、Telegram で作業するためのブロックが表示され、基本的な Telegram ビジネスプロセスも表示されます。 Telegram: Echo.よく考えて、動作原理を理解することが必要である。
入力では、Telegram (Message モデル)からメッセージを受信する。そこには、送信されたメッセージのテキスト(text)と、送信者の識別子を得ることができるchat モデル(id)が含まれています。最後のブロック Telegram: Send Messageは、受信したメッセージを送信者に返しますが、ボットの代わりに送信します。
このビジネスプロセスは、ボットの初期テストやボットとのコミュニケーションに使用することができます。そのためには、情報を受け取り、ビジネスプロセスを開始するエンドポイントを作成する必要があります。
作成する際には、以下の項目を無効にすることが重要です。 Middleware Token Auth.エンドポイントは無許可で使用できるようにオープンである必要があります。
Telegram ボットの動作原理は非常にシンプルです。ボットに送信されるすべてのメッセージは特別なウェブフックに送られ、さらにそれを自動的に転送して、選択したエンドポイントに送信し、さらなるアクションを行うことができます。
したがって、最後のステップはボットをアクティブにすることです。Telegram にこのエンドポイントを登録し、このボットを関連付ける必要があることを指示する必要があります。このためには、{Bot API Token} の代わりにボットトークンを指定し、エンドポイントURLをすべて記載したPOST-request をアドレスに送信する必要があります。
https://api.telegram.org/bot{Bot API Token}/setWebhook
このようなメッセージが返ってくれば、すべてが正しく行われたことになります。
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
ボットは動作可能な状態になっているので、メッセージを送って返してもらうことができます。
音声メッセージ付きファイルを受信する
Telegram モジュールは、主にテキストメッセージを扱うために設計されています。そして、私たちのタスクは、音声メッセージのファイルを取得することです。AppMaster を使えば、この問題を簡単に解決することができます。まず、メッセージの構造を解析するために、一般的にTelegram から受け取るものを分析する必要があります。その Get Request Bodyブロックは、このために設計されています。これは、リクエストの構造をあらかじめ指定する必要がなく、リクエストの内容にかかわらず、リクエスト全体を受け取ることができる。このブロックは、クエリ結果をバイトの集合として返します。 To Stringブロックで、結果を人間が読める形で表示したり、ログに保存したりすることができます(Write to Logブロック)をさらに分析する。
リクエスト全体から、2つのパラメータに注目します:
Sender ID- リクエストに指定されている"id":300493858
File ID-"file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"
リクエストにマッチした独自のモデルを作成し、それを使って必須項目を取得することができます。しかし、正規表現を作成した方が早いでしょう(Regex)を使用することができます。これを実現するために String Match Regexブロックは,式そのものを入力とし,与えられた式との一致をチェックする文字列も入力とする。
最初の場合、式は "id":"\d+
その結果、"id":300493858 という文字列が得られます。この文字列から、"id":) という余分な文字を削除する必要があります。 Replace Stringをブロック化し、識別子そのものを残す。
2番目のケースでは、原理は全く同じですが、少し複雑な表現が使われます: "file_id":"[^"]+
これで送信者IDとファイルIDが揃ったので、これを使ってファイルそのものを取得することができる。これを行うには、Telegram API 。これは以前、ボットのエンドポイントを登録するときにすでに行われました。今度は、ファイルを取得するために同様のリクエストを行う必要があります。リクエストURLの{File ID} は、受信したファイルIDに置き換える必要があります。
https://api.telegram.org/bot{Bot API Token}/setWebhook/getFile?file_id={File ID}
リクエストを送信し、その結果を受信するために HTTP Requestブロック、URLを指定し Method = GETをパラメータとして使用します。
受信したレスポンスから、ファイルへの相対パスを知ることができます。file_path"パラメータを使用します。したがって、次の正規表現("file_path":"[^"]+)を使って目的の値を抽出し、"https://api.telegram.org/file/bot{Bot API Token}/"と接続することで、ファイルへの完全なリンクを取得することができます。
OGA からファイルを変換してMP3
ファイルを受信するのですが、障害となるのは Whisperとの連携は、サービスではサポートしていません。 OGAのフォーマットに変換する必要があります。適切なフォーマットのいずれかに変換する必要があります。
一例として Zamzarのサービスを利用し(無料プランでは月100回の変換が可能)、MP3 に変換しています。
詳細については、そのドキュメントを参照するか、他の類似のサービスを使用することができます。ここでは、このサービスを使った作業の詳細な分析は行わず、AppMaster の実装に直接関係する部分についてのみ検討することにします。
まず第一に、リクエストは正しい認証データを必要とします。これらは Basic Authenticationの形式を使用します。そのためには、リクエストの中で値を持つヘッダーを渡す必要があります:
Key = 'Authorization'
Value = 'Basic '+ ユーザーIDとパスワードは、": "で区切って base64形式
サービスへの登録時に取得したAPIキーがユーザーIDになります。これに": "を付けて、Base64 形式でエンコードする必要があります。 To Base64ブロックにする必要があります。その結果をヘッダ(Make Key-Value (String)ブロック)を作成します。
次のステップは、データベースデザイナーでクエリのモデルを作成することです。リクエストの送信は Multipart Formの形式で、それぞれ、このリクエストの形式のモデルを用意する必要がある。この例では、モデルはString というタイプの3つのフィールドで構成されています:
- source_file- ソースファイルへのフルパス(前のステップで学習済み)。
- source_format- ソースファイルの形式。この例では、固定値「ogg 」です。
- target_format- 変換対象フォーマット。Whisper でサポートされている任意の形式を選択することができます。例として、"mp3"を使用することにしましょう。
ビジネスプロセスエディターで、" "を使用します。 Makeブロックを使ってモデルデータを記入し、POST リクエストとして https://sandbox.zamzar.com/v1/jobs/ に送信します。 HTTP Requestブロック(必ず指定してください。 Serialize request body = Multipart Form).
なお、このリクエストでは変換後のファイルは返却されず、変換するためのタスクが作成されるだけであることに注意してください。その結果については別途申請する必要があり、そのためには作成されたタスクのIDが必要です。このIDはリクエストに対するレスポンスのボディから取得する必要があり、そのためには正規表現を使ってid値を抽出するという、すでに作業済みの処理を行う必要がある。
変換した結果は別途適用する必要がある。そのためには、さらに2つの要求が必要になる。1つ目は、結果ができているかどうかを調べること。2つ目は、完成したファイルを受け取ることです。同時に、準備完了の正確な時間がわからないので、一定の間隔(例えば、1秒ごと)で準備完了を確認するリクエストを繰り返し送信するループを編成することができます。
GET メソッドを使ってhttps://sandbox.zamzar.com/v1/jobs/{id} というURLにHTTP Request を送る必要がある。ここで{id} は前のステップで取得したタスク ID である。これは、前のリクエストと同じヘッダーを使用します。
受信した応答から、準備状況を確認する必要があります。変換が完了した場合、レスポンスには以下の内容が含まれます。 "status": "successful"であり、我々にとっては、ループを完了させて次に進むことができるという合図である。
ステータスに加えて、レスポンスには完成したファイルのID("target_files":[{"id":)が含まれていなければなりません。という形でファイルへの最終的なリンクを得るために抽出されなければならない。https://sandbox.zamzar.com/v1/files/{ID}/content
同時に、ファイルの受信は許可されたユーザーのみが利用できるため、これまでのリクエストと同じヘッダを使用してHTTP Request を実行する必要があります。
リクエストの結果、ファイルの内容が取得されるので、名前を付けて保存しておく必要があります。
MP3 のファイルをWhisper に送り、テキストに変換する。
これで、次のステップである音声メッセージ付きファイルを送信して認識させるための準備がすべて整いました。このためには Multipart Form形式を使用します。ただ、前の例と違って、リクエストはファイルそのものを転送する必要があり、そのファイルへのリンクは必要ない。
このようなリクエストのモデルを External HTTP Requestセクションを作成します。この場合、リクエストを完全に作成することはできず、リクエストボディモデルを作成することのみに限定されます。モデル自体は2つのパラメータで構成されています:
- File(Virtual File型) - 認識する必要がある同じファイル。
- model(タイプ String) - ここでは、値を指定します。 whisper-1.
また、リクエストには、作業用の鍵が必要です。 OpenAIの認可ヘッダーを生成し、APIを起動します。 Bearer Token型にする。
Key = 'Authorization'
Value = 'Bearer '+ OpenAI API Key
次に、音声メッセージを認識させるためのPOST のリクエスト自体をWhisper のサービスに対して URLhttps://api.openai.com/v1/audio/transcriptions
ファイルの認識に成功した結果、以下のようなレスポンスを受け取ることができます。{"text": "Hello world.”}
受信したテキストを送信するChatGPT
を使い続けることができます。 HTTP Requestブロックにリクエストを送信します。 ChatGPT.APIドキュメントを探索するだけでなく、リクエストとレスポンスのモデルを独自に作成するためです。しかし、よりシンプルなオプションとして、AppMaster の既製モジュールを使用して、次のように作業することもできます。 OpenAIを、モジュールセクションでインストールする必要があります。
最小限の十分なバージョンでは、以下のパラメータを指定するだけでよい。 OAI ChatCompletionMessageモデル(role = user,content = 送信するメッセージ)を配列に追加し、ChatGPT にリクエストを送信します。 OpenAI: Create Chat Completionブロック(設定パラメータ model = gpt-4).
その結果、ChatGPT からの応答が得られます。 それを読み取るのは contentのパラメータを使用します。 OAI ChatCompletionChoiceのモデルです。
のユーザーに対して、ChatGPT からレスポンスを送信する。Telegram
最後のステップは、以前すでに行われたことを繰り返すだけです。Telegram 。しかし、単にメッセージを送信者に返すことから始めたとすると、今度はこのメッセージが一連の様々なアクションを開始し、その結果がChatGPT からの応答として返されます。
このようなボットを開発する過程では、検討する価値がある:
- Telegram ボットによって送信された各リクエストが正常に処理されなければならないように動作する。そうでなければ、ボットは何度もそれを繰り返そうとするので、何か問題があった場合には、何度もそれを受け取ることになります。リクエストがエラーにならず、正常に処理できるようなロジックを構築するようにしてください。
- すべてのリクエストが1回目で意図したとおりに動作するわけではありません。エラーを検索する必要がありますが、そのためには、次のように手配します。 Write to Logブロックを作成します。これらは、各ブロックが実際に送信を計画したデータを受信しているかどうかを確認するためと、ブロックの結果を分析し、応答を詳細に調べるための両方に便利です。
- ガイドの一部として、すべてのリクエストは予測可能で成功し、プロセスはかなり直線的であると仮定しました。実際には、アクション(たとえば、ユーザーが音声メッセージの代わりにテキストメッセージを送信した場合、あるいは画像を送信した場合にどうするか)やエラー処理(HTTPリクエストのステータスをチェックし、異なるレスポンスオプションを考慮する)について、さまざまなオプションを提供する必要があります。