2019/02/25

Dialogflow から webhook される php を Google API v2 に対応させる

Dialogflow から google api v2 に対応しろとのお知らせが表示されるので、webhook される php を Google API v2 に対応させる

命令の流れをおさらい
まずは、どういう仕組だったかを忘れていたのでメモ
アプリに入って、命令を行うと、Intent にある Action and parameters の値を含む json が


Fulfillment に指定した url へポストされるので、応答メッセージを含む json を返す

という仕組み

API の切り替え
google api v2 対応への切り替え(Dialogflow側)は、スイッチを切り替えるだけ


api 切り替え後の web 側変更
API を切り替えると、送られてくる json の内容が変わります。また、応答メッセージを埋め込む json の形式も変わります。なので「そのままだと アプリから応答がありません」みたいな形になります

api v1 で post される json


api v2 で post される json


php の場合
$data = file_get_contents("php://input"); // 取得
$jsonArray = json_decode($data, true); // json -> 配列

// v1 action取得
$action = $jsonArray["result"]["action"];

// v2 action取得
$action = $jsonArray["queryResult"]["action"];
な感じに取得位置を変更します

送られてきたアクションに対する応答は、こちらのような形で speech と displayText で返していたものを fulfillmentText というキーに変更します
※面倒なので v1 の応答に fulfillmentText を追加して対応したらうまく動きませんでした

端的に書くと
 // api v1 応答
 echo json_encode(array(
  "speech" => '応答メッセージ',
  "displayText" => '応答メッセージ'
 ));

 // api v2 応答
 echo json_encode(array(
  "fulfillmentText" => '応答メッセージ'
 ));
です


2019/02/15

LGのテレビをWOLで電源オン

LGテレビの有線LANへマジックパケットを送信してWoL(Wake on LAN)していたが、初期化したら受け付けなくなった(自分のやった設定を忘れていた)ので、本体側の設定メモ

設定→機器設定→ワンタッチディスプレイ→「Wi-Fi経由でオンにする」
なんで設定の名前が「Wi-Fi経由でオンにする」なのかは不明~

2019/02/12

DELL Optiplex GX520 (Celeron D モデル) へ CentOS7 をインストール

Linux環境を手元に用意する必要があって、廃棄寸前の GX520 Celeron D 336 モデル へ 64bit の CentOS7 をインストールできるのかって話

モデルは GX520シリーズ スモールファクタの最安モデル Celeron D の 2.8GHz なマシン

Celeron D 336 の仕様によると、インテル64 = はい ということで、かろうじてOKな感じ

USBメモリに CentOS7 minimal iso を焼いて、GX520 の bios からブート順序を変更の後、特に問題もなくインストールできました

Centos7 で再起動するとネットワーク設定が利用できなくなる

Centos7 でOS導入後に nmcli で IP や GW を入れ、NICを有効にする→ネットワークが使える
その後、OSを再起動すると、ネットワークが接続されない

下記の設定を確認(enp2s0 は nmcli device で表示されるデバイス名なので各環境で違います)

#cat /etc/sysconfig/network-scripts/ifcfg-enp2s0

ONBOOT=no
となっていたら、ネットワークが自動起動されないので、下記のコマンドで ONBOOT=yes へ変更する

# nmcli connection modify enp2s0 connection.autoconnect yes

2019/02/01

Python の参照渡しが途切れるパターン

Python が「値渡し」か「参照渡し」かを調べると、オブジェクトなので全て参照渡しという記事があったり、オブジェクトの型によるという記事があったりマチマチですが

配列等のオブジェクトが「参照渡し」で、それ以外のint等の単純な型が「値渡し」みたいです

が、渡した先で配列を再構築させたりすると、参照先が変更されて参照が途切れてしまうパターン

def test(a):
    # a = {'key': 'value'} ←これをやると新たに a へオブジェクトが生成されて参照が切れてしまう
    a.clear()
    a['key'] = 'value'
    return

d = {'default': 'zero'}
print(d)
test(d)
print(d)

Chrome for Android のホームを任意のブックマークフォルダへ設定

Chrome for Android のブックマークが呼び出しにくくなったので、ホームをブックマークに設定する方法

  1. ホームページに chrome-native://bookmarks/folder/0 を入れる
  2. Chromeのタブをすべて閉じて、起動し直す
  3. ブックマークのルートが表示されるので、表示したいブックマークまで移動し、右上のボタンでタブ一覧を表示させる
  4. 表示したいブックマークのURLが表示されるので、これ(末尾の番号がそのフォルダ)をホームページに設定する