Bot

【GAS】トークを送信できているが、エラーが表示される。

motu12345

2022.07.06既読 2897

GASにてメッセージを送ろうとしています。送信はできるのですが、エラーが返ってきます。
どのように対処するばよいでしょうか?
​---------------------------------------------------
SyntaxError: Unexpected end of JSON input
​---------------------------------------------------
​---------------------------------------------------
function send_message() {
  const token = getAccessToken(getEnv_(),"bot")
  const getID = get_ID()
  const uri = getID.BASE_API_URL + "/bots/" + getID.bot_id + "/users/" + getID.user_id + "/messages"
  const payload = {
        "content": {
          "type""text",
          "text""test"
        }
  }
  const headers = {
    'Content-Type' : 'application/json',
    'Authorization''Bearer ' + token.access_token
    }
  const options = {
    'method':  'post',
    'headers'headers,
    'payload'JSON.stringify(payload)
  }
  try {
   const res = JSON.parse(UrlFetchApp.fetch(urioptions).getContentText('UTF-8'))
   Logger.log('Success:')
   return res.returnValue
  } catch(e) {
    Logger.log('Error:')
    Logger.log(e)
  }
}

コメント4

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

    佐藤正宗

    記事を書いた者です。これはGAS用のライブラリは使わずにご自身でJWT Token取得していますか?
    どのようにしてどんなエラーが出ているのかちょっとわかりにくいので、詳細を書いてもらえますでしょうか。

    この記事はToken取得するための記事なので、Botを動かしてみたいならこちらの記事を参考にしてくださいませ。
    https://qiita.com/kunihiros/items/caac7a00a6cd745fff1c

    2022.07.08

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

    motu12345 投稿者

    ご返事ありがとうございます。記事が大変参考になりました。
    JWTの内容を参考にライブラリを使用せず、JWT Tokenを取得しています。

    -------------------------------------------------
    function test(){  
     const token = getAccessToken(getEnv_(),"bot")
     Logger.log(token.access_token)
    }

    function getJwt(ENV){
     const header = Utilities.base64Encode(JSON.stringify({"alg":"RS256","typ":"JWT"}), Utilities.Charset.UTF_8)
     const claimSet = JSON.stringify({
       "iss": ENV.CLIENT_ID,
       "sub": ENV.SERVICE_ACCOUNT,
       "iat": Math.floor(Date.now() / 1000),
       "exp": Math.floor(Date.now() / 1000 + 2000)
     })
     const encodeText = header + "." + Utilities.base64Encode(claimSet, Utilities.Charset.UTF_8)
     const signature = Utilities.computeRsaSha256Signature(encodeText, ENV.PRIVATE_KEY)
     return encodeText + "." + Utilities.base64Encode(signature)
    }

    function getAccessToken(ENV, scopes) {
     const uri = "https://auth.worksmobile.com/oauth2/v2.0/token";
     const payload = {
       "assertion" : getJwt(ENV),
       "grant_type" : encodeURIComponent("urn:ietf:params:oauth:grant-type:jwt-bearer"),
       "client_id": ENV.CLIENT_ID,
       "client_secret": ENV.CLIENT_SECRET,
       "scope": scopes    
     }
     const options = {
       "method": "post",
       "headers": {"Content-Type" : "application/x-www-form-urlencoded"},
       "payload": payload
     }  
     return JSON.parse(UrlFetchApp.fetch(uri, options))
    }

    2022.07.08

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

    佐藤正宗

    Token取得は正常にできていて、上のsend_message()を実行したらLINE WORKSにメッセージは送られるけどSyntaxErrorが返るって理解であっていますか?
    私のメッセージ送信のコード、晒しておきますね。

    ```
    function userMessageSend(ENV, text) {
     const token = getAccessToken(ENV, "bot").access_token
     const uri = "https://www.worksapis.com/v1.0/bots/"; + ENV.BOT_ID + "/users/" + ENV.userId + "/messages"
     const json = {
         "content": { "type": "text", "text": text }
     }
     const options = {
       "method": "POST",
       "headers": {
         "Content-Type": "application/json",
         "Authorization": "Bearer " + token
       },
       "payload": JSON.stringify(json)
     }
     return UrlFetchApp.fetch(uri, options)
    }
    ```

    2022.07.08

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

    motu12345 投稿者

    ありがとうございます。おっしゃる通りです。
    参考にさせていただいたら、エラー回避できました。

    2022.07.08

    1
前の投稿 PowerAutomateを使用して、トークボットに通知を飛ばすにはどうしたらいい?
次の投稿ファイルのアップロードができません
リスト

まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。