Как реализовать API ответа клиента в osTicket - PullRequest
0 голосов
/ 26 января 2019

Я работал над osTicket для реализации API для ответа клиентов.Я настроил входящие электронные письма от клиентов, которые преобразуются в новый тикет, а затем прошел через код задания cron, который запускает выборку почты.Я нашел некоторые из API, которые использовались для ответа персонала, и я реализовал этот API.

Мой вопрос заключается в том, как создать API ответа клиента в osTicket и с чего мне начать.

Если кто-либо всеготово, тогда дайте мне ссылку на репозиторий git.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 05 февраля 2019

Добавьте следующий код в файл upload/api/http.php для установления маршрутизации.

......
$dispatcher = patterns('',
  url_post("^/tickets/clientReply$", 
  array('api.tickets.php:TicketApiController','postClientReply')),
  .......

Затем добавьте следующий код в файл upload/include/api.tickets.php

//client reply API
function postClientReply() {
    try {
        if (!($key = $this->requireApiKey()) || !$key->canCreateTickets())
            return $this->exerr(401, __('API key not authorized'));

        $errors = $this->validateParams($_POST);
        //            echo count($errors);
        if (!count($errors)) {
            $user = TicketUser::lookupByEmail($_POST['clientUserMail']);

            $data['id'] = Ticket::getIdByNumber($_POST['ticketNumber']); //ticket id
            $data['userId'] = $user->getId(); //user id
            $data['staffId'] = 0;
            $data['poster'] = ''; //$user->getUserName();
            $data['ip_address'] = $_POST['ip_address']; //'::1';
            $data['type'] = OsticketConfig::$commonParams['ownerMessageType']; //'M' - Message owner
            $data['flags'] = ThreadEntry::FLAG_BALANCED; // HTML does not need to be balanced on ::display()
            $data['body'] = $_POST['response'];
            $data['html'] = OsticketConfig::$commonParams['htmlFormat']; //html
            $data['created'] = OsticketConfig::$commonParams['sqlFunctionNow']; //SqlFunction NOW();
            $data['updated'] = OsticketConfig::$commonParams['defaultDateTime'];

//              print_r($data); die();

            $sql = 'INSERT INTO  ' . THREAD_ENTRY_TABLE . ' (`id`  ,`thread_id` ,`staff_id` ,`user_id` ,`type` ,`flags` ,`poster` ,`editor` ,`editor_type` ,`source` ,`title` ,`body` ,`format` ,`ip_address` ,`created` ,`updated`)
                 VALUES (NULL ,  ' . $data['id'] . ',  ' . $data['staffId'] . ',  ' . $data['userId'] . ',  "' . $data['type'] . '",  ' . $data['flags'] . ',  "' . $data['poster'] . '", NULL , NULL , "API" , "" ,  "' . $data['body'] . '",  "' . $data['html'] . '",  "' . $data['ip_address'] . '",  ' . $data['created'] . ',  "' . $data['updated'] . '")';

            if (!$res = db_query($sql)) {
                $message = ['status' => 'failed', 'message' => 'SQL query not executed'];
            }

            $message = ['status' => 'success', 'message' => 'Reply posted succesfully'];
        } else {
            $message = ['status' => 'failed', 'errors' => $errors];
        }

        $result_code = 200;
        $this->response($result_code, json_encode($message), $contentType = "application/json");
    } catch (Throwable $e) {
        $msg = $e->getMessage();
        $result = array('tickets' => array(), 'status_code' => 'FAILURE', 'status_msg' => $msg);
        $this->response(500, json_encode($result), $contentType = "application/json");
    }
}

function validateParams($params) {
//      print_r($params);   die();
    $errors = array();
    if (empty($params['clientUserMail'])) {
        $errors[] = 'client User Mail is missing';
    }
    if (empty($params['response'])) {
        $errors[] = 'Message is missing';
    }
    if (!empty($params['ticketNumber'])) {
        $id = Ticket::getIdByNumber($params['ticketNumber']);
        if ($id <= 0) {
            $errors[] = "Ticket not found";
        } else {
            //To check the ticket status, which may be closed
            $ticket = Ticket::lookup($id);
            $ticket_status = $ticket->getState();
            if ($ticket_status == OsticketConfig::$commonParams['closedTicketStatus']) {
                $errors[] = "You can't make reply, Ticket closed";
            }
        }
    } else {
        $errors[] = 'Ticket number is missing';
    }

    return $errors;
}

Добавьте следующий код в файл upload/include/class.config.php

.....
static $commonParams = array(
    'ownerMessageType' => 'M',
    'htmlFormat' => 'html',
    'sqlFunctionNow' => 'NOW()',
    'defaultDateTime' => '0000-00-00 00:00:00',
    'closedTicketStatus' => 'closed'
);
...