Your SlideShare is downloading. ×
0
勉強会force   #4Chatter Integration       ISV Architect 中嶋 一樹
Chatterによって変わることbefore            after
A社からオーダーが入っています。B社に訪問してきました。田中CIOが部長の知り合いだそうです。              田中CIO   今日、C社にテレアポしました。1Mを超える案件に膨らむ可能性があります。                 ...
What is Curation?キュレーションとは、無数の情報の海の中から、自分の価値観や世界観に基づいて情報を拾い上げ、そこに新たな意味を与え、そして多くの人と共有すること。            ∼佐々木俊尚 氏の「キュレーションの時代」...
demo
Architecture                         キーフレーズを抽出                     ③                 ②        ④Chatterフィードを取得             ...
Source Code// メンバーとなっているグループ一覧を取得public function get_my_chatter_groups(){  $url = $this->instance_url . "/services/data/" ...
Source Code// Yahoo APIにフィード情報を送信し、キーフレーズを抽出public function get_keywords($sentence, $min_score){  $api_key = urlencode($th...
海外とのコミュニケーションbefore       after
demo
Architecture               翻訳依頼 (非同期)        翻訳取得 (同期)                             ③               ②                      ...
Source Code// Chatterフィードに「=>言語記号」をともなう書き込みがあれば翻訳のためのメソッド(chatter_translate.request_translate)を実行trigger feedItem_to_trans...
Source Code// 非同期で中間サーバへ翻訳リクエストを送信public with sharing class chatter_translate {    @future(callout=true)    public static ...
Source Code  // Google Translate APIにテキストを送信して翻訳   public function translate($input_lang, $output_lang, $text){     if (is...
Chatterで       く。世界中から答えを得る。 質問:XXXXXXXX     回答1                      質問:XXXXXXXX     回答2                             回答1 ...
demo
Architecture                                 翻訳取得 (同期)             質問送信 (非同期)                             ③             ② ...
Source Code// Chatterフィードに「=>stackoverflow」をともなう書き込みがあれば、類似QA取得のためのメソッド(chatter_stackoverflow.request_similarを実行)trigger f...
Source Code// 非同期で中間サーバへ類似QA取得リクエストを送信public with sharing class chatter_stackoverflow {    @future(callout=true)    public...
Source Code  // StackExchange APIに英語翻訳された質問文を送信して類似QAを取得  public function request_similar($title){      $title = urlencode...
Chatter連携のパターン        Feed型       Curation型                                fb    Q         &                A        応答型  ...
Object Model       FeedItem          FeedComment      FeedTrackedChange     FeedLikeNewsFeed          UserProfileFeed      ...
Chatter REST API vs. Apex例えばCollaborationGroupFeedまたはRecordFeedに投稿する場合:   Chatter REST API:   POST https://インスタンス.salesfor...
Chatter REST API vs. Apex例えばUserProfileFeedに投稿する場合:   Chatter REST API:   POST https://インスタンス.salesforce.com/services/data/...
Chatter REST API vs. Apex例えばFeedCommentに投稿する場合:  Chatter REST API:  POST https://インスタンス.salesforce.com/services/data/v25.0...
Chatter REST API vs. Apex例えばNewsFeedを取得する場合:  Chatter REST API:  POST https://インスタンス.salesforce.com/services/data/v25.0/ch...
Follow.       @nkjmhttp://nkjmkzk.net
Upcoming SlideShare
Loading in...5
×

勉強会force#4 Chatter Integration

999

Published on

Published in: Technology, Design
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
999
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "勉強会force#4 Chatter Integration"

  1. 1. 勉強会force #4Chatter Integration ISV Architect 中嶋 一樹
  2. 2. Chatterによって変わることbefore after
  3. 3. A社からオーダーが入っています。B社に訪問してきました。田中CIOが部長の知り合いだそうです。 田中CIO 今日、C社にテレアポしました。1Mを超える案件に膨らむ可能性があります。 Force 追加情報。Forceの引き合いもあるそうです。 D社の案件、受注しました。600kです。 受注 Summer’12がリリースされました。 Partner Summitの締め切りが間近です。 HerokuにPHPサポートが追加されました。 Heroku php fogとの違いは何ですか? 100万人の集客 今年のCloudforceは100万人の集約を見込んでいます。 Service Cloudに新機能が追加されました。 Chatter Messenger機能が有効化されていますね。 Radian6の新しい資料をアップしました。 新しい資料 Homepageをリニューアルしました。 Curation
  4. 4. What is Curation?キュレーションとは、無数の情報の海の中から、自分の価値観や世界観に基づいて情報を拾い上げ、そこに新たな意味を与え、そして多くの人と共有すること。 ∼佐々木俊尚 氏の「キュレーションの時代」より引用∼
  5. 5. demo
  6. 6. Architecture キーフレーズを抽出 ③ ② ④Chatterフィードを取得 ダッシュボード生成 アクセス ①
  7. 7. Source Code// メンバーとなっているグループ一覧を取得public function get_my_chatter_groups(){ $url = $this->instance_url . "/services/data/" . $this->api_version . "/chatter/users/me/groups"; $this->logger->logger("URL : " . $url, __CLASS__, __FUNCTION__); $response = $this->callout_for_get($this->access_token, $url); if ($this->logger->error){ $this->logger->set_error("Failed to get my chatter groups.", __CLASS__, __FUNCTION__); return(false); } return($response[groups]);}// News Feedからフィード情報を取得public function get_all_feeds(){ $url = $this->instance_url . "/services/data/" . $this->api_version . "/chatter/feeds/news/me/feed-items"; $this->logger->logger("URL : " . $url, __CLASS__, __FUNCTION__); $response = $this->callout_for_get($this->access_token, $url); if ($this->logger->error){ $this->logger->set_error("Failed to get all feeds by group.", __CLASS__, __FUNCTION__); return(false); } return($response[items]);}
  8. 8. Source Code// Yahoo APIにフィード情報を送信し、キーフレーズを抽出public function get_keywords($sentence, $min_score){ $api_key = urlencode($this->api_key); $sentence = $this->strip_mention($sentence); $sentence = urlencode($sentence); $url = "http://jlp.yahooapis.jp/KeyphraseService/V1/extract?output=json&appid=" . $api_key; $response = $this->callout_for_post($url, $sentence); $offset = 0; $keywords = array(); foreach($response as $k => $v){ if ($v < $min_score){ continue; } $keywords[$offset][value] = $k; $keywords[$offset][score] = $v; $offset++; } return($keywords);}
  9. 9. 海外とのコミュニケーションbefore after
  10. 10. demo
  11. 11. Architecture 翻訳依頼 (非同期) 翻訳取得 (同期) ③ ② ④ Chatterに翻訳を書き込みChatterに書き込み ①
  12. 12. Source Code// Chatterフィードに「=>言語記号」をともなう書き込みがあれば翻訳のためのメソッド(chatter_translate.request_translate)を実行trigger feedItem_to_translate on FeedItem (after insert) { for (feedItem fi : Trigger.new) { string output_lang = ; if (fi.body.contains(=>en)){ output_lang += en,; } if (fi.body.contains(=>ja)){ output_lang += ja,; } if (fi.body.contains(=>es)){ output_lang += es,; } if (fi.body.contains(=>fr)){ output_lang += fr,; } if (fi.body.contains(=>it)){ output_lang += it,; } if (fi.body.contains(=>zh-CN)){ output_lang += zh-CN,; } if (output_lang != ){ string instanceUrl = URL.getSalesforceBaseUrl().toExternalForm(); string sid = UserInfo.getSessionId(); string fi_json = System.JSON.serialize(fi); chatter_translate.request_translate(sid, instanceUrl, feedItem, append, fi_json, output_lang); } }}
  13. 13. Source Code// 非同期で中間サーバへ翻訳リクエストを送信public with sharing class chatter_translate { @future(callout=true) public static void request_translate(string sid, string instanceUrl, string object_type, stringtranslation_mode, string object_json, string output_lang){ Http http_protocol = new Http(); HttpRequest http_request = new HttpRequest(); // Set the endpoint URL. instanceUrl = EncodingUtil.urlEncode(instanceUrl, UTF-8); sid = EncodingUtil.urlEncode(sid, UTF-8); output_lang = EncodingUtil.urlEncode(output_lang, UTF-8); String endpoint = https://chatter-translate.herokuapp.com/chatter/api.php?service=translate&sid=+ sid + &instanceUrl= + instanceUrl + &object_type= + object_type + &translation_mode= +translation_mode + &output_lang= + output_lang; http_request.setEndPoint(endpoint); // Set the HTTP verb to GET. http_request.setMethod(POST); // Set body http_request.setBody(object_json); // set callout timeout to 60sec(max) http_request.setTimeout(60000); // Send the HTTP request and get the response. // The response is in JSON format. if (!Test.isRunningTest()){ http_protocol.send(http_request); } }}
  14. 14. Source Code // Google Translate APIにテキストを送信して翻訳 public function translate($input_lang, $output_lang, $text){ if (is_array($text)){ $q = ; foreach ($text as $k => $v){ $q = $q . &q= . urlencode($v); } } else { $q = &q= . urlencode($text); } if ($input_lang){ $url = "https://www.googleapis.com/language/translate/v2?format=text&key=" . $this->api_key . $q . "&source=" .$input_lang . "&target=" . $output_lang; } else { $url = "https://www.googleapis.com/language/translate/v2?format=text&key=" . $this->api_key . $q . "&target=" .$output_lang; } $response = $this->callout($url); $array_translation = array(); foreach ($response[data][translations] as $k => $v){ array_push($array_translation, $v[translatedText]); } return($array_translation); }
  15. 15. Chatterで く。世界中から答えを得る。 質問:XXXXXXXX 回答1 質問:XXXXXXXX 回答2 回答1 回答2 回答3 回答4 回答5 回答6 before after
  16. 16. demo
  17. 17. Architecture 翻訳取得 (同期) 質問送信 (非同期) ③ ② ④ ⑤ Chatterに類似質問を 書き込み 類似質問取得 (同期)Chatterに質問 ①
  18. 18. Source Code// Chatterフィードに「=>stackoverflow」をともなう書き込みがあれば、類似QA取得のためのメソッド(chatter_stackoverflow.request_similarを実行)trigger feedItem_to_stackoverflow on FeedItem (after insert) { for (feedItem fi : Trigger.new) { if (fi.body.contains(=>stackoverflow)){ string instanceUrl = URL.getSalesforceBaseUrl().toExternalForm(); string sid = UserInfo.getSessionId(); string fi_json = System.JSON.serialize(fi); chatter_stackoverflow.request_similar(sid, instanceUrl, fi_json); } }}
  19. 19. Source Code// 非同期で中間サーバへ類似QA取得リクエストを送信public with sharing class chatter_stackoverflow { @future(callout=true) public static void request_similar(string sid, string instanceUrl, string object_json){ Http http_protocol = new Http(); HttpRequest http_request = new HttpRequest(); // Set the endpoint URL. instanceUrl = EncodingUtil.urlEncode(instanceUrl, UTF-8); sid = EncodingUtil.urlEncode(sid, UTF-8); String endpoint = https://chatter-translate.herokuapp.com/chatter/api.php?service=stackoverflow&sid=+ sid + &instanceUrl= + instanceUrl; http_request.setEndPoint(endpoint); // Set the HTTP verb to GET. http_request.setMethod(POST); // Set body http_request.setBody(object_json); // set callout timeout to 60sec(max) http_request.setTimeout(60000); // Send the HTTP request and get the response. // The response is in JSON format. if (!Test.isRunningTest()){ http_protocol.send(http_request); } }}
  20. 20. Source Code // StackExchange APIに英語翻訳された質問文を送信して類似QAを取得 public function request_similar($title){ $title = urlencode($title); $filter = urlencode(!BF)_06.x0cLAwTSeXymC1qQAk-hwP.); $url = "http://api.stackexchange.com/2.0/similar?order=desc&sort=relevance&title=" . $title ."&site=stackoverflow&filter=" . $filter; $response = $this->callout($url); return($response[items]); }
  21. 21. Chatter連携のパターン Feed型 Curation型 fb Q & A 応答型 変換型
  22. 22. Object Model FeedItem FeedComment FeedTrackedChange FeedLikeNewsFeed UserProfileFeed CollaborationGroupFeed RecordFeed
  23. 23. Chatter REST API vs. Apex例えばCollaborationGroupFeedまたはRecordFeedに投稿する場合: Chatter REST API: POST https://インスタンス.salesforce.com/services/data/v25.0/chatter/feeds/record/グルー プIDまたはレコードID/feed-items { "body" : { "messageSegments" : [ { "type": "Text", "text" : "テスト書き込み” } ] } } Apex: feedItem fi = new feedItem(body=テスト書き込み, parentId=グループIDまたはレコードID); insert fi;
  24. 24. Chatter REST API vs. Apex例えばUserProfileFeedに投稿する場合: Chatter REST API: POST https://インスタンス.salesforce.com/services/data/v25.0/chatter/feeds/user- profile/ユーザーID/feed-items { "body" : { "messageSegments" : [ { "type": "Text", "text" : "テスト書き込み” } ] } } Apex: feedItem fi = new feedItem(body=テスト書き込み, parentId=ユーザーID); insert fi;
  25. 25. Chatter REST API vs. Apex例えばFeedCommentに投稿する場合: Chatter REST API: POST https://インスタンス.salesforce.com/services/data/v25.0/chatter/feed-items/親Feed のID/comments { "body" : { "messageSegments" : [ { "type": "Text", "text" : "テスト書き込み” } ] } } Apex: feedComment fc = new feedComment(commentBody=テスト書き込み, parentId=親FeedのID); insert fc;
  26. 26. Chatter REST API vs. Apex例えばNewsFeedを取得する場合: Chatter REST API: POST https://インスタンス.salesforce.com/services/data/v25.0/chatter/feeds/news/me/feed-items Apex: List<NewsFeed> newsFeedList = [select id, parentId, body from newsfeed];
  27. 27. Follow. @nkjmhttp://nkjmkzk.net
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×