фабрикатор получает сообщение об авторе из истории фида для историй, которые относятся к проблемам, комментариям и аудитам

Я пытаюсь интегрировать фабрикатор с jabber-чатом. Я создал бота, который отправляет сообщения автору сообщения в jabber chat для каждого нового запроса фида. Мое требование состоит в том, что как получить оригинального автора фиксации, если история фида – это проблема, аудит или commnet. Я хочу уведомить автора о совершении каких-либо проблем, связанных с его совершением. Нужно ли мне анализировать историю, чтобы получить эту информацию? Как мне это сделать?

заранее спасибо

Solutions Collecting From Web of "фабрикатор получает сообщение об авторе из истории фида для историй, которые относятся к проблемам, комментариям и аудитам"

Объект истории должен иметь элемент данных, который будет содержать информацию об Авторе и коммиттерах. Вот так:

"PHID-STRY-spjfpdv4wuigblmh3ygb" : { "class" : "PhabricatorFeedStoryCommit", "epoch" : 1409840112, "authorPHID" : "PHID-USER-tcyihgi43sw6o7yrnhu5", "chronologicalKey" : "6055220066741547443", "data" : { "commitPHID" : "PHID-CMIT-ievqiimtsnlfhlk5imqq", "summary" : "[blah]", "authorName" : "Author Name <author_email@example.com>", "authorPHID" : "PHID-USER-tcyihgi43sw6o7yrnhu5", "committerName" : "Commiter Name <commiter_email@example.com>", "committerPHID" : "PHID-USER-tcyihgi43sw6o7yrnhu5" } } 

Если нет, он должен иметь objectPHID:

 "PHID-STRY-mqlkjzwkbr3th4h5n2eg" : { "class" : "PhabricatorApplicationTransactionFeedStory", "epoch" : 1409841382, "authorPHID" : "PHID-USER-2bubef6xonwicvaool4w", "chronologicalKey" : "6055222630292077307", "data" : { "objectPHID" : "PHID-CMIT-is7pmo5nyvv4eruq2msn", "transactionPHIDs" : [ "PHID-XACT-CMIT-svvkzf7dfplzdxp" ] } } 

Вы можете запросить оттуда, используя вызовы кабелепровода.

Лучший способ понять и проверить это: http://phabricator.yourhost.com/conduit/method/feed.query/
щелкните [метод вызова]
Это вернет список изменений, которые вас интересуют: «objectPHID»: «PHID-DREV-xxxxxxx»,

Теперь http://phabricator.yourhost.com/conduit/method/differential.query/
set phids => ["PHID-DREV-xxxxxxx"]

Это вернет «authorPHID»: «PHID-USER-xxxxx» и «рецензенты»: ["xxxx", "xxxx", "xxxx"]

Я также предлагаю рассмотреть /src/infrastructure/daemon/bot/handler/PhabricatorBotFeedNotificationHandler.php

Теперь код

 $stories = $this->getConduit()->callMethodSynchronous( 'feed.query', array( 'limit' => $config_page_size, 'after' => $chrono_key_cursor, 'view' => 'text', ) ); foreach ($stories as $story) { $objects = $this->getConduit()->callMethodSynchronous( 'phid.lookup', array( 'names' => array($story['objectPHID']), ) ); $diff_query_results = $this->getConduit()->callMethodSynchronous( 'differential.query', array( 'phids' => array($story['objectPHID']), )); foreach ($diff_query_results as $diff_query) { $authorResults = $this->getConduit()->callMethodSynchronous( 'phid.lookup', array( 'names' => array($diff_query['authorPHID']), ) ); $message .= ' '.$objects[$story['objectPHID']]['uri']; foreach ($authorResults as $author) { $authorName = $author['name']; print_r ($authorName); } $reviewersResults = $this->getConduit()->callMethodSynchronous( 'phid.lookup', array( 'names' => $diff_query['reviewers'], ) ); foreach ($reviewersResults as $reviewer) { $reviewerName = $reviewer['name']; print_r ($reviewerName ); } } 

Я запросил feed.query. и извлекал authorPHID и objectPHID если они доступны. С objectPHID я запросил метод differnetial.query conduit, чтобы узнать reviewers и ccs . ccs – это массив пользователей, которым необходимо получить кусок сообщения. Затем я использовал метод user.query conduit для извлечения имен пользователей и сопоставил их с jabber именами пользователей и отправил сообщения.