たとえば、空のサンドボックスコミュニティ
では、これはどのように行われますか?
非表示のパラメーターを使用してドキュメントを読み込みます
最初に、非常に重要な点に注意する必要があります:グループまたは公開ページに代わって音声メッセージを送信するには、ユーザートークンを使用してダウンロードする必要がありますが、コミュニティを送信するときに既にトークンを使用してこのドキュメントを添付できます。
通常のドキュメントについては、ダウンロードするサーバーアドレスを取得します。
https://api.vk.com/method/docs.getUploadServer?access_token=ACCESS_TOKEN&type=audio_message&v=5.63
ここでのハイライトは、 type = audio_message parameterです。
応答として、次のJSONを取得する必要があります 。
{ "response": { "upload_url":"https://..." } }
VKontakteサーバーにファイルを正しくアップロードする方法
ファイルをmultipart / form-data形式で送信しないと、何も機能しません。
mp3形式では、オーディオのダウンロードも機能しません。実験できますが、 oggを使用することをお勧めします。
ここからのコードを使用して、目的の形式でファイルをダウンロードできます(例はJavaで指定されており 、自分用の類似物はインターネットで見つけることができます)。
MultipartUtilityクラスのインスタンスを使用します。その中の何も変更する必要はありません。
StringBuilder response_sb = new StringBuilder(); try { MultipartUtility multipart = new MultipartUtility("___", "UTF-8"); multipart.addFilePart("_____"); List<String> response = multipart.finish(); for (String line : response) { response_sb.append(line); } } catch (IOException e) { e.printStackTrace(); }
すべて、音声メッセージがロードされます。 サーバーからの応答は、成功した場合、次のようになります。
{ "file":"62802565|0|0|805131||ogg|9943|file.ogg||||||=" }
ドキュメントをサーバーに保存します
ここで注意することも重要です。ユーザーからではなくドキュメントを保存する場合、送信するときはドキュメントのように見え、音声メッセージのようには見えません。 または、空のメッセージを送信するだけです。
次のリクエストを行います。
https://api.vk.com/method/docs.save?file=__file&access_token=ACCESS_TOKEN&v=5.63
これが最後の段階でした。 答えが得られます。
{ "response": [ { "id": 000000000, "owner_id": 000000000 ... , } ] }
以上です。 上記で取得したowner_idとidを使用してリンクdoc(owner_id)_(id)を指定することにより 、 添付ファイルで通常の方法でメッセージを送信できます。
PS通常のユーザーは、音声録音以外のものを含むメッセージを送信できません。 そして、APIを通じてこれは非常に簡単に行われます。 これは、以前はコメント/ディスカッションなどで機能していましたが、現在では、コミュニティによる音声メッセージの読み込み( 送信ではありません! )
私は、APIを介して音声メッセージを送信する方法を見つける「調査」の著者ではありません。すべての情報をヒープに収集し、それを美しく整理しようとしました。 私はこれについて多くの質問にインターネットで気付きました。
この記事はVKontakte APIを使用した人向けに書かれたものであり、興味のないことは説明しませんでした。 決定したら、VK LongPollサーバー(個人ページ用)およびCallback APIとWebサーブレット(コミュニティ用)を使用して、Javaでボットを作成する方法に関する記事をさらに2つ作成します。
材料と助けてくれてありがとう、スタニスラフ・クデルコに感謝します。