カテゴリー: HangoutsChat

  • Google ChatのチャットボットのAPIのリファレンス

    Google ChatのチャットボットのAPIのGoogleの公式リファレンスのURL。

    https://developers.google.com/chat/concepts

    カード形式のやり方とか、Node.jsでwebhookとか、いろいろな使い方が掲載されている。

  • GASのGoogle ChatのChat Botを作成して公開する手順

    久しぶりにGASで書いたChatbotのテストをしようとしたら、デプロイ方法が変わっていたので、書き直し。

    作成フェーズ

    1. Chat Bot のサンプルプロジェクトのファイルを開く
    2. プロジェクト名をつけて保存する
    3. GASのコードを書く

    デプロイ1(スクリプトエディタ側)

    1. GASのスクリプトエディタで、「公開」→「マニフェストから配置」の順にクリックする。
    2. どのバージョンをデプロイするのかを聞かれるので、「最新」を選び「Get ID」をクリックする。
    3. 表示された「Deployment ID」の値をコピーしておく(テキストに張り付けておくとよい)。
    4. 「Close」をクリックして閉じる。

    デプロイ2(Google Cloud Platform側)

    1. GASのスクリプトエディタとは別のタブで、Cloud Platformを開く。( https://console.cloud.google.com/ )
    2. Cloud Platformにログインする。
    3. 上部のメニュー部分のプロジェクト選択の部分をクリックして、ポップアップされた画面で、「新しいプロジェクト」を選択する。
    4. プロジェクト名などを入力して作成する。
    5. 左上のナビゲーションメニュから「APIとサービス」を選択する。
    6. 「+APIとサービスの有効化」をクリックする。
    7. 検索で、「chat」を入力する。
    8. 「Hangouts Chat API」を選択する(ここは、まだ古い名称のままだった)。
    9. 「有効にする」をクリックする。
    10. 左のメニューから「認証情報」をクリックする。
    11. 「+認証情報を作成」をクリックする。
    12. 「サービスアカウント」を選択する。
    13. サービスアカウントの名前などを入力して、作成する。
    14. 権限をクリックする。
    15. 「アクセスを許可」をクリックし、作成したサービスアカウントに「Project」の「オーナー」の権限をつける。
    16. (IAMの画面になっている場合は)左上のナビゲーションメニュから「APIとサービス」を選択する。
    17. 表示されているAPIの中から「Hangouts Chat API」をクリックする。
    18. 左のメニューから「設定」をクリックする。
    19. ボットの名前を入力する
    20. アバターのURLを入力する(https://goo.gl/yKKjbw)
    21. 説明を入力する。
    22. 機能を選択する(用途に合わせて選択する)
    23. 接続設定で、「Apps script project」を選択する。
    24. デプロイIDに、上記で取得した「Deployment ID」の値を入れる。
    25. 権限を選択する。
    26. 保存をクリックする。

    以上で、公開は完了。

    あとは、Google Chatからボットを検索して利用する。

  • GASからJDBCでCloud SQLに接続しようとすると接続が確立できない

    GAS(Google Apps Script)から、Cloud SQLに接続をJDBCから行ったのだが、下記のエラーが出て接続できない。

    Exception: データベース接続を確立できませんでした。接続文字列、ユーザー名、パスワードを確認してください。

    接続先の環境は、Cloud SQL(Google Cloud Platform SQL)上で新しく作ったインスタンスで、第2世代で、MySQL8.0のインスタンス。

    GASのソースコードとしては、下記。

    function dbConn() {
      var dbConnectName = "プロジェクト名:us-central1:インスタンス名"; // GCP上で表示される接続名
      var user = "ユーザ名";
      var password = "パスワード";
      var dbName = "DB名";
      
      var conURL = "jdbc:google:mysql://" + dbConnectName + "/" + dbName;
      Logger.log(conURL);
      
      var dbCon = Jdbc.getCloudSqlConnection(conURL, user, password);
      Logger.log(dbCon.getCatalog());
      
      return dbCon;
    }

    いろいろと調べて、JDBCの`Jdbc.getConnection`でも試したが、接続できず。

    原因として、わかったことは、GASから呼び出されるJDBCは、MySQL8.0へのインスタンスへの接続に対応していないということ。MySQL5.7で新しくインスタンスを作り直して、`Jdbc.getCloudSqlConnection`を行ったところ、あっさりと接続できた。

    まさか、JDBCが対応していないとは。

  • Hangouts Chatの一回の投稿は

    Hangouts Chatの一回の投稿で書ける文字数は、半角4000文字以内。

    (メールで送られてきた内容をシェアしようとしたら、文字数制限ではじかれて発覚した。)

  • Fusion Tablesが廃止される

    Notice: Google Fusion Tables Turndown
    https://support.google.com/fusiontables/answer/9185417?hl=en

    Googleより、「Fusion Tables」を廃止するとメール通知があった。「Fusion Tables」の廃止日は、2019年12月3日とのこと。2019年8月より、MAP APIでは警告が表示される。データダウンロードのためのGoogle Takeoutは2019年3月から提供されるとのこと。

    現実的な移行先は、Googleスプレッドシートか、Google Cloud SQL。Cloud SQLは、利用料金がかかってしまうので、無料というわけにはいかない。かつ、使い勝手が大きく変わるので、辛いかも。データの可視化は、GoogleデータポータルからCloud SQLにつなげてやるのがよさそう。

  • Chat Botのボタンをクリックしたときに発生するイベント

    Hangouts ChatのチャットボットをGASで作る場合、カードの中のボタンをクリックしたときに発生するイベントは、onCardClick()イベント。

    カードに設定したボタンの`actionMethodName`で設定したをユニークにすることで、複数のボタンを識別することができる。

    /**
     * Card click event handler
     **/
    function onCardClick(e) {
    
      // button is clicked.
      if (e.action.actionMethodName === '****') {
        return ******;
      }
    
    }
    
  • JSON型のテキストをJSONのオブジェクトにする

    JSON形式のテキストをJSONとして扱うには、テキストをJSONオブジェクトに変換(パース)する必要がある。 JSON.parse() 関数を使用して、JSON形式のテキストをJSONオブジェクトに変換する。 これを行うことで、JSONを扱う関数などにJSONデータとして、値を渡すことできるようになる。(Hangouts Chatへの応答はJSONでデータを作って返す必要があり、それを関数などで作ろうとするとJSONオブジェクトにパースする場面がでた)

    var jsonObj = JSON.parse(JSON形式のテキスト);

    例) Chat Bot用に実際にJSON形式のテキストをつくり、JSONオブジェクトにする

    // JSON形式のテキストを作る
    var jsonText = "";
    jsonText += '{';
    jsonText += '"header": {\n';
    jsonText += '"title": "タイトル", \n';
    jsonText += '"subtitle": "サブタイトル"\n';
    jsonText += '}\n';
    jsonText += '}\n';
     
    // JSON形式のテキストを、JSONオブジェクトに変換する
    var jsonObj = JSON.parse(jsonText);
     
    
  • Chat Botのカード内のテキストフィールドで使えるタグ

    Hangouts Chatのチャットボットのカードのテキストフィールドで使えるタグ。

    太字 Bold            
    斜体 Italic    
    下線 Underline            
    取り消し線 Strikethrough    
    フォントカラー Font Color            
    リンク Hyperlink    
    改行 Line Break    

    参考: https://developers.google.com/hangouts/chat/reference/message-formats/cards

  • GASの関数は引数の型により値渡しと参照渡しが決まる

    以下のように、関数に引数を渡す場合、引数hogeの型によって、値渡しか、参照渡しかが決まる。

    function func1(引数) {
      。。。。
    }
    

    引数が、数値、文字列、真偽値の場合は、値渡し(値を複製して、関数に渡す)。

    引数が、オブジェクト、配列の場合は、参照渡し(引数に指定したものが、書き変わる)。

    ※これは、GASの特性ではなく、JavaScriptの仕様。

  • GASの比較演算子

    GAS(GoogleAppsScript)の比較演算子。JavaScriptと同じ。

    == 等しい A==B AとBは等しい
    != 等しくない A!=B AとBは等しくない
    < より小さい A<B AはBより小さい
    <= 以下 A<=B AはB以下
    > より大きい A>B AはBより大きい
    >= 以上 A>=B AはB以上