スマホの契約はpovoを使っているのですが、電話の発信が高い!高すぎる!高杉晋作です!(古い)。

5分以内かけ放題で550円。これに入っていないと30秒22円です。5分話して440円ですよ!ちょっとお店の予約に電話しただけで100円とか簡単にかかることもあります。(店員さんが空き情報調べてくれたりすると…すぐですよ…)

で、私が使っているのがG-CALL電話(なつかしい〜と叫んだアナタは、おそらく50代以上でしょう…)。G-CALL電話は基本料ゼロ円で30秒8円!!(G-CALLのアフィリみたいだな…アフィリがないか今度調べてみよう…アフィリにしたら、どっかに「アフィリもしてます!」と書くことにします)

まぁ、G-CALL以外にもこういうサービスはあるのですが、問題は…Googlemapにある電話ボタンから発信すると有無を言わさず、「デフォルトの通話アプリ」で設定したものしかダメなんですよ。defaultcall.png をみてください!

通話アプリの設定画面。FaceTimeオーディオがデフォルトに設定されている。

G-CALLがここに対応するアプリになっていればいいんでしょうけど、大人の事情なのか、ここに出てこないので、発信できないのです。(デフォルトがfacetimオーディオになっているのは、私が電話料金マニアのため、相手がiPhoneの場合Facetimeオーディオで発信するようにしているためです。普通の方はモバイル通信になっていると思います)

で、iOS27のショートカット機能で、これも自動化してしまえ!と思い立ったわけです。

アクションボタンにショートカット呼び出しにする。

ショートカットで「画面に出てる番号を認識する」→G-Callアプリの電話発信のところにペースト「できるようにする」(自動ペーストがセキュリティの関係でできない様子)

私は他にもswitchという留守電アプリを使っているので(海外にいるときに電話受けたり発信したりする時に安くなるのです。=国内通話扱いで電話できる。海外にいるときにxxx証券からの営業電話が夜中になって断っただけで300円くらいかかったことがあります)こちらからも発信できるようにしました。https://getswitch.jp/ai-receptionist

というわけで、ショートカットに以下のプロンプトをコピペするとできあがりです。

iPhoneのアクションボタンから実行する「画面の番号から発信」というショートカットを作成してください。

【目的】

Googleマップなどの画面に表示されている電話番号をスクリーンショットから読み取り、利用する通話アプリを選べるようにする。

選択肢は原則として「Switch」「G-Callでんわ」「コピーだけで終了」。

利用者が事前にFaceTime対応を確認して登録した番号に限り、先頭に「FaceTimeオーディオ」を追加する。その場合もSwitchとG-Callでんわは必ず表示する。

説明文だけでなく、実行できるアクションと変数の接続を作成する。

【実装上のルール】

・この端末に実在するアクションだけを使う。
・gcall://やswitch://など、未確認のURLスキームを推測して作らない。
・SwitchやG-Callの発信を、標準の「電話をかける」やtel:で代用しない。
・「アプリを開く」だけで番号が入力されたことにしない。
・任意の画面の座標タップや、他のアプリを操作する架空のペーストアクションを作らない。
・変数名を文字として書くだけでなく、実際のアクション出力を接続する。
・作成・検証のために実際の電話をかけない。

【処理の順序】

1.画面を取得する

最初の実行アクションを「スクリーンショットを撮る」にする。
メニュー、通知、別アプリを表示する前に現在の画面を取得する。

写真ライブラリの最新画像ではなく、この実行で撮った画像を使う。
写真ライブラリには保存しない。

2.文字を読み取る

「画像からテキストを抽出」で、手順1の画像をOCRする。

3.電話番号を抽出する

OCR結果から電話番号候補を取り出す。
標準の電話番号抽出アクションを優先し、必要ならテキスト照合を組み合わせる。

対象は、まず日本国内の0から始まる10桁または11桁の電話番号とする。

・全角数字を半角数字にする。
・番号内の空白、ハイフン、括弧を除去する。
・先頭の0を維持するため、数値ではなくテキストとして扱う。
・画面全体の数字を一括でつなげない。
・時刻、評価、価格、住所の数字を混ぜない。
・AIによる番号の推測や補完、店舗名からの番号検索は行わない。

「03 6339 1846」は「0363391846」に整形する。
これは処理例であり、番号を固定値として組み込まない。

整形した候補の重複を取り除く。
候補が1件なら変数「発信先番号」に保存する。
複数なら「リストから選択」で1件を選び、「発信先番号」に保存する。
0件なら「画面から電話番号を読み取れませんでした」と表示して終了する。
以前のクリップボードの番号は代用しない。

4.番号をコピーする

「発信先番号」をプレーンテキストでクリップボードにコピーする。
0063などの事業者番号は付けない。相手先の番号だけをコピーする。

5.FaceTimeの表示対象を確認する

ショートカット内に、利用者が編集できる設定欄を作る。
「コメント」アクションで「FaceTime対応確認済み番号:その電話番号でFaceTimeが使えると確認した番号を1行に1件入力」と説明する。

その直後の「テキスト」アクションを登録欄とし、初期値は空欄にする。
例の電話番号や架空の番号を登録しない。

登録欄を改行で分割し、空行を除外する。
各番号はOCRした番号と同じ方法で整形する。

「発信先番号」が登録された番号のいずれかと完全一致した場合だけ、変数「FaceTime表示対象」を真にする。
部分一致や末尾だけの一致では判定しない。
未登録なら偽にする。
登録欄が空なら、すべて偽にする。

これは利用者が管理する表示対象リストであり、Appleへのリアルタイム照会ではない。

次の条件をFaceTime対応の根拠にしないこと。
・連絡先に登録されている
・電話番号のラベルが「iPhone」になっている
・070、080、090から始まる
・iMessageを使える
・自分の端末にFaceTimeが入っている
・FaceTimeのURLを開ける

相手の対応確認のために試しに発信しない。
存在しない「FaceTime対応を確認」アクションやAPIを作らない。

6.発信方法を表示する

「もし」で「FaceTime表示対象」に応じて分岐し、それぞれに「メニューから選択」を配置する。

真の場合:
・FaceTimeオーディオ
・Switch
・G-Callでんわ
・コピーだけで終了

偽の場合:
・Switch
・G-Callでんわ
・コピーだけで終了

どちらのメニューにも案内文として
「発信先:[発信先番号]」
を表示する。角括弧部分は実際の変数に置き換える。

FaceTime表示対象の場合も自動では発信しない。
利用者がメニューで選んだ方法を1つだけ実行する。

7.FaceTimeオーディオを選んだ場合

標準のFaceTimeアクションを使用し、通話の種類を「オーディオ」に設定する。
宛先には、選択済みの「発信先番号」1件だけを渡す。
必要な場合はテキストを電話番号型に変換して接続する。

ビデオ通話、携帯電話回線による通常発信、複数人へのグループ通話にはしない。
同じ連絡先に別の番号やメールアドレスがあっても、勝手に宛先を変更しない。

通話失敗や無応答を理由に、