特定のBotのみコンテンツアップロードができない。 - トークBot - LINE WORKS Developers : コミュニティ

特定のBotのみコンテンツアップロードができない。

Koshi検証用

2021.10.04既読 198

担当者様および有識者の方々

お世話になります。

首記の件で相談をさせて下さい。

現在C#でコンテンツアップロードのプログラムを作成しており

複数のBot(①、②)でテストを実施していますが、

一部のBotで例外が発生し下記のメッセージが返ります。

「"転送接続からデータを読み取れません: 既存の接続はリモート ホストに強制的に切断されました。。"」

(LineWorks側でリトライが発生しているのか例外が返るまで5秒ほどかかります)

Botの設定に誤りがあるかと思っていたのですが

Postmanを利用すると問題なくアップロード処理ができます。

 
 C#プログラム
Postman 
 Bot①
 アップロード可能
アップロード可能 
 Bot②
 上記の例外発生
アップロード可能 

この場合の原因として何が考えられるかご教授お願いします。

※実行したプログラム

 using System;
using System.Linq;
using System.Net.Http;
using System.IO;
using System.Net.Http.Headers;
namespace SendImageToLineWorks
{
   class Program
   {
       private static readonly string ApiId = "ApiId";
       private static readonly string ConsumerKey = "ConsumerKey";
       private static readonly string Token = "Token";
       private static readonly string URL = "http://storage.worksmobile.com/openapi/message/upload.api";
       static string Path = "アップロードファイルのフルパス";
       private static readonly HttpClient Client = new HttpClient();
       static void Main(string[] args)
       {
           try
           {
               // HTTP要求メッセージ(HttpRequestMessage)作成
               using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, URL))
               // MIMEの種類[multipart/form-data]を使用してエンコードされたコンテンツのコンテナ作成
               using (var dataContent = new MultipartFormDataContent())
               using (var fileStream = File.OpenRead(Path))
               // ストリームに基づいて HTTP コンテンツを提供するクラスの生成
               // ※基本クラスはHTTPエンティティ本体およびコンテンツヘッダーを表す「HttpContent」
               using (var streamContent = new StreamContent(fileStream))
               {
                   // 要求ヘッダーに指定のヘッダーを追加
                   requestMessage.Headers.Add("consumerKey", ConsumerKey);
                   requestMessage.Headers.Add("Authorization", string.Format("Bearer {0}", Token));
                   requestMessage.Headers.Add("x-works-apiid", ApiId);
                   // HTTP応答のContent-Typeから「boundary」の値を取得、「"」を削除して再設定
                   var boundary = dataContent.Headers.ContentType.Parameters.First(o => o.Name == "boundary");
                   boundary.Value = boundary.Value.Replace("\"", string.Empty);
                   // HTTP応答のContent-Dispositionコンテンツヘッダーの値を設定
                   streamContent.Headers.ContentDisposition =
                          // Content-Dispositionヘッダーの値クラス生成
                          new ContentDispositionHeaderValue("form-data")
                          {
                              Name = "\"resourceName\"",                                        // コンテンツのボディ部の名前
                              FileName = string.Format("\"{0}\"", new FileInfo(Path).Name)      // ペイロードを格納するためのファイル名
                          };
                   // HTTP応答のContent-Typeコンテンツヘッダーの値を設定
                   streamContent.Headers.ContentType = new MediaTypeHeaderValue("image/png");
                   
                   // マルチパート/フォームデータのMIMEの種類にシリアル化されるHttpContentオブジェクトのコレクションにHTTPコンテンツを追加
                   dataContent.Add(streamContent);
                   // HTTPメッセージの内容を設定
                   requestMessage.Content = dataContent;
                   var response = Client.SendAsync(requestMessage).Result;
                   var resStatus = response.StatusCode;
               }
           }
           catch(Exception e)
           {
               Console.WriteLine(e);
           }
       }
   }
}

コメント4

  • 업데이트 된 답글입니다.

    Koshi検証用 投稿者

    補足です。

    テストデータ作成者に確認したところ
    Bot①、Bot②を「同じメールアドレス」で認証したそうです。

    その為かAPI_IDは以下のように採番されています。
    Bot① ⇒ jp1・・・・
    Bot② ⇒ jp2・・・・

    3文字目が「2」のAPI_IDだと上記の例外が発生します。

    2021.10.04

    0
  • 업데이트 된 답글입니다.

    Koshi検証用 投稿者

    続報です。

    Bot②ですが、リクエストヘッダーから「Expect :100-continue」を削除することで
    コンテンツアップロードができました。

    (ただBot①等は上記の有無に関係なくアップロードが正常に行えます)

    上記の事実を含め本当の解決策を教えてください。

    2021.10.05

    0
  • 업데이트 된 답글입니다.

    Koshi検証用 投稿者

    LINEWORKS社から回答頂きたい内容は以下になります。

    -------------------------------------------------------------------------------------
    ①:エラーの発生原因
    ②:上記の条件(同一メールアドレスでの複数アカウント作成)でのみ
      発生する事象か否か
    ③:②の仮説が正しい場合、現時点では同一メールアドレスでの複数アカウント作成は
      警告が表示され実行できないので今後は本事象は発生しないと断定できるか
    -------------------------------------------------------------------------------------

    2021.10.06

    0
  • 업데이트 된 답글입니다.

    LINE WORKS 公式アカウント

    ご認識の通り個別の環境によるエラーとなりますので、Communty の性質上、調査、ご回答することができません。
    個別の環境によるエラーに関しましては、担当のパートナー営業までご相談ください。

    2021.10.08

    0
前の投稿 2021年9月30日を最後にLINEWORKSのBOTからのcallbackを受信できません
次の投稿callbackを受信できない