【Android】好きなキャラクターに通知を送ってもらおう!【gemini】
初めに
Special Thanks
かもみれ様
プロンプト及びアイデアをお借りしております。
※事前に本記事の許可をいただいております。
本記事について
試行錯誤しながらマクロを作成、本記事を執筆しておりますのでわかりにくい点や改善できる点などもあるかと思いますが何卒温かい目で閲覧いただけますと幸いです。
コメント欄にてご報告いただけましたら適宜記事の改稿など対応させていただこうと思っております。
※対応には時間がかかる場合もあります。
筆者の環境
Google Pixel 7(Android15)
macrodroid
gemini
注意事項
制作に至る流れ
かもみれさんのツイート(https://x.com/chamoomilen/status/1847461359841398809)を見て、Androidにおいても同様のことができるようにしようと思い至ったため。
macrodroidについて
macrodroidは事前決められたとおりにマクロを実行させるアプリになります。
今回は、geminiのAPIを叩き、その結果を通知に出力させる方法をとります。
未インストールの方は以下からインストールしてください。
geminiについて
geminiの利用
APIを使用してチャットをさせる影響上、
API利用に無料枠のあるgeminiを使用します。
(chatgptのAPIを使用するには課金設定が必須のため)
以下のリンクからログインしてください。
以下のような画面が表示された場合、内容をよく読んだうえで上側のチェックボタンにチェックを入れてください。
(下側のチェックボタンはメールの受信を希望する方のみチェックを入れてください。)
ログインできたら左側のサイドメニューのGet API keyボタンを押します。(鍵のアイコンのボタンです。)
「APIキーを作成」ボタンを押します。
以下のようなダイアログが表示された場合は確認の上「OK」を押します。
「新しいプロジェクトでAPIキーを作成」を選択します。既存のGoogle Cloudプロジェクトがある場合はそちらを選択しても大丈夫です。
作成されたAPIキーをコピーしあとからアクセスできる場所にメモしておいてください。(他人に共有したり、他人が見れる場所に書いておくことは悪用の危険性があるため推奨しません)
デフォルトでは課金が有効になっているので、以下のサイトにアクセスし、先ほど作成したプロジェクト名のアクションから「課金を無効にする」をクリックしてください。
請求先アカウントの欄に「請求が無効です」と表示されていれば大丈夫です。
キャラクターのプロンプトの作成
サイドメニューの「create new prompt」から新しくプロンプトを作成し、上方の鉛筆マークから「prompt name」を自分のわかりやすいものにしてください。
「System instructions」にキャラクターの性格、口調などを設定するプロンプトを入力してください。
今回、筆者はかもみれさんが作成した條澤広のプロンプトをお借りして動作させています。
マクロの作成
マクロを作成します。
今回は、説明のために私が作成した充電開始時に通知するものと、天気予報を通知するものを紹介します。
充電開始時用のマクロ
以下は充電開始時に通知するマクロのインポート用ファイルです。
上のファイルをダウンロードしたら、macrodroidのホームから「インポート/エクスポート」を選択し、インポートから先ほどダウンロードしたファイルを選択してインポートしてください。
以下の様なマクロが表示されれば大丈夫です。
変数を設定します。
「変数を設定」の「gemini-api-key」をタップし、設定変更を押してOKをタップ、事前にメモしていたgeminiのAPIキーを入力してください。
次に、「HTTPリクエスト(POST)」をタップし、設定変更、画面上部からコンテントボディに移動してください。
その後、以下のテキストをコピーして貼り付けてください。
また、「キャラクター設定のプロンプトがあります」の部分を先ほど入力したキャラクター設定のプロンプトに書き換えてください。(両端の「"」マークは消さないでください。)
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "{lv=tmpQuestion}"
}
]
}
],
"systemInstruction": {
"role": "user",
"parts": [
{
"text": "「キャラクター設定のプロンプトが入ります」"
}
]
},
"generationConfig": {
"temperature": 1,
"topK": 64,
"topP": 0.95,
"maxOutputTokens": 8192,
"responseMimeType": "text/plain"
}
}
下部にある「HTTPリクエスト(POST)」も同様に設定してください。
次に、画面下部にある「ローカル変数」をタップし、
gemini-api-key
tmpAnswer
tmpJsonResult
tmpQuestion
tmpResultHttp
以上の変数が存在することを確認してください。(gemini-api-key以外の値は設定されていなくても大丈夫です)
設定が完了すれば、この時点で動作させることが可能になっていると思います。
右上の三点リーダからアクションを試すを押せば、通知が届くと思います。
天気予報通知用のマクロ
以下は充電開始時に通知するマクロのインポート用ファイルです。
「gemini-api-key」の設定及び「HTTPリクエスト(POST)」の設定は上と同じように設定してください。
まず、APIを叩く際に現在住んでいるところの天気予報を与える必要があります。そのため、今回は気象庁の情報を下に自動で天気予報を取得するようにしています。
以下のリンクから現在住んでいる地域のurlを確認してください。
https://weather.tsukumijima.net/primary_area.xml
「http://weather.livedoor.com/forecasts/rss/area/130010.xml」のようになっていると思います。
この最後についている6桁の数字を
「https://weather.tsukumijima.net/api/forecast/city/」
の後ろに付けて
「weather-page」の変数の値に設定してください。
またその際、最後についている「.xml」は削除するようにしてください。
以上で、天気予報を取得し、キャラクターに通知させることができるようになったと思います。「アクションを試す」から試してみてください。
エラーが出る場合
返答が「{lv=tmpJsonResult[candidates][0][content][parts][0][text]}」となる場合は処理中にエラーが発生しています。
エラーの内容は各マクロの変数「tmpResultHttp」の値に入っていると思いますのでそちらを確認してください。
その後、以下のリンクから「Gemini API バックエンド サービスのエラーコード」を読み、エラーの内容に合わせて修正してください。
わからなければ本記事のコメント欄で聞いてください。可能な限り対応します。
なお、上記リンクに記載のない「HARM_CATEGORY_SEXUALLY_EXPLICIT」というエラーが出る場合もあります。
この場合、「safety settings」に引っかかっています。
その場合はAPI用のgeminIのキャラクタープロンプトを開き、右上の歯車を押してAdvanced settingsのEdit safety settingsより4つの項目を「Block none」に設定してください。
それでも何回試してもエラーが出る場合も、エラー内容を添えて聞いてくだされば可能な限り対応します。
自作・改修する場合
通知の送信条件は「トリガー」,「条件」にブロックを追加してください。
「トリガー」はマクロの起動条件を、
「条件」は起動後の判定を行います。
通知してほしい内容の変更をする際は「tmpQuestion」の文字列を変更してください。
文字列の入力の際右側の三点リーダからスマホのバッテリー残量などを自動入力させる事ができます。
基本的な機能に関しては充電開始時用のマクロを複製し、それを元に変更をするだけで実行することができると思います。
条件分岐の変数「gemini-pro」
gemini-proに回答をさせることができるのは一日に50回までなので、その制限まで使用するためのカウントです。下記に貼り付けてあるマクロを使用して50回の制限を毎日0時にリセットするようにすれば正常に動作します。
50回使用後は自動的に下位のモデルである「geminI-flash」を利用するための処理になっています。
この機能を使用する場合、ホーム画面の「変数」より「geminI-pro」という名前で種類を整数にして変数を作成してください。
以下はgeminI-proを使用する場合向けのファイルです。
充電・天気予報のどちらについてもgeminI-pro初期化マクロは必須になります。
最後に
稚拙な文章で申し訳ないなと思いつつ、これで救われる方がいればいいなという思いで本記事を書かせていただきました。
どれだけの方の役に立つかはわかりませんが、一人でも多くの方のためになっていればいいなと思います。
なにかわからないことがあれば本記事にコメントしていただければ可能限り対応させていただきます。(note内のコメントに対する返信ができないようなので可能であればXでお聞きください。noteの私のプロフィールから飛べます。)
それでは、最後まで読んでいただきありがとうございました。
この記事が気に入ったらサポートをしてみませんか?