estey/hipsupport

此包已被弃用,不再维护。未建议替代包。

一个易于安装的即时聊天系统,使用HipChat和Laravel。

v1.0.3 2014-11-02 03:53 UTC

This package is not auto-updated.

Last update: 2020-01-19 16:21:45 UTC


README

Latest Stable Version Build Status Coverage Status

该项目不再被积极更新。

HipSupport 是一个 Laravel 4.2 包,它使用 HipChat 的 API 简化在 HipChat 上创建即时聊天支持系统的过程。如果您已经使用 Laravel 4.2 和 HipChat,那么您可以在几分钟内启动一个功能齐全的即时聊天系统。

工作原理

HipChat 发布了一个 jQuery HipChat 插件,允许用户将一个 HipChat 网页客户端 嵌入到他们的网页中,这样用户现在可以匿名访问公共聊天室。HipSupport 使用 HipChat 的 API 动态为每个传入的聊天请求创建一个新的公共聊天室,并向您的公司用户发送关于此新聊天会话的通知。从那里,您的公司用户可以加入房间并与用户聊天。

HipChat Embedded Chat Client

安装

通过编辑您的项目的 composer.json 文件,使用 Composer 安装此包以要求 estey/hipsupport

{
    "require": {
        "laravel/framework": "4.2.*",
        "estey/hipsupport": "1.0.*"
    }
}

然后,更新 Composer

composer update

打开 app/config/app.php,并将服务提供程序添加到 providers 数组中

'Estey\HipSupport\HipSupportServiceProvider'

将外观添加到 app/config/app.php 底部的 aliases 数组中。

'HipSupport' => 'Estey\HipSupport\HipSupportFacade'

配置

要发布配置文件,请运行

php artisan config:publish estey/hipsupport

配置文件将位于 app/config/packages/estey/hipsupport/config.php。在 token 字段中需要管理员令牌,并在 owner_user_id 字段中需要一个具有添加房间权限的用户。

room_name 的格式应该是独一无二的,默认情况下在房间名称末尾附加 Y-m-d H:m

[
    'room_name' => 'Live Chat ' . date('Y-m-d H:m')
]

或者,您可以将其留空,并在运行时分配任何您想要的值。比如用户的IP地址等。如果房间名称已存在,则将在名称末尾附加一个数字。 (这会带来额外的API请求成本,所以请注意这一点。有关更多详细信息,请参阅限制部分。)

要发送通知,您必须在 notification 数组中定义 room_id。如果 room_idnull,则不会发送通知。

Artisan 命令

有两个 Artisan 命令可以帮助您开始。 php artisan hipsupport:onlinephp artisan hipsupport:offline。这两个命令将您的即时聊天在线和离线。在线接受一个参数来定义将 HipSupport 保持在线的分钟数。

php artisan hipsupport:online 480

上面的命令将 HipSupport 在线8小时。这样您就不必记住关闭它。使用 HipSupport::isOnline() 方法检查 HipSupport 是否在线。

快速入门

要创建一个基本的绝对安装,创建一个路由来处理你的聊天请求。如果HipSupport离线,那么HipSupport::init()将返回false

Route::post('chat', ['before' => 'csrf', function() {
    $room = HipSupport::init();
    if ($room) {
        return Redirect::to($room->hipsupport_url);
    }
}]);

在你的视图中,添加一个表单,当HipSupport在线时将其提交到你的聊天路由。

@if (HipSupport::isOnline())
  {{ Form::open(array('url' => 'chat')) }}
    {{ Form::submit('Start Live Chat') }}
  {{ Form::close() }}
@endif

使用JavaScript,你可以在iFrame中打开聊天,在模态框内的iFrame中打开聊天,或者在新的窗口中打开聊天。聊天屏幕简单,并自动调整到其容器的大小。为了处理ajax请求,你的路由可能看起来像这样

Route::post('chat', ['before' => 'csrf', function() {
    $room = HipSupport::init();

    if ($room) {
        if (Request::ajax()) {
            return Response::json(['url' => $room->hipsupport_url]);
        }
        return Redirect::to($room->hipsupport_url);
    }
}]);

命名用户

HipChat的API目前没有提供为访客命名的方法。如果你传递HipSupport::init(array('anonymous' => false)),那么HipChat会提示用户输入他们的名字,但页面有点笨拙,不是响应式的,并且破坏了实时聊天系统的错觉。作为替代,你可以在HipSupport::init()方法之前添加一个表单和一层验证,并将用户的输入传递到room_name和通知message。你甚至可以将用户的数据(用户ID、姓名、电子邮件等)保存在数据库中,与聊天的room_id相关联,这样你就可以将聊天历史归因于特定用户。

以下是一个极其基本的验证示例。

Route::post('chat', ['before' => 'csrf', function() {
    $validator = Validator::make(Input::all(), ['name' => 'required|min:5']);

    if ($validator->fails()) {
        // Redirect with Errors or send Errors via JSON Response... 
    }   

    $room = HipSupport::init([
        'room_name' => 'Live Chat with ' . Input::get('name'),
        'notification' => [
            'message' => Input::get('name') . ' would like to chat.'
        ]
    ]);

    // Save the name and $room->room_id into the database.
    if ($room) {
        if (Request::ajax()) {
            return Response::json(['url' => $room->hipsupport_url]);
        }
        return Redirect::to($room->hipsupport_url);
    }
}]);

限制

HipChat的API目前限制API请求每5分钟内最多100次请求。每次HipSupport::init()调用会消耗3次请求(检查房间名称是否存在、创建房间和通知房间)。更多信息请参阅HipChat的速率限制

房间太多!

采用动态创建的房间的一致命名方式可能是个好主意。在HipSupport的下一个版本中,我计划添加一些Artisan命令,以帮助大量删除或归档在指定时间内未活跃且房间名称包含特定字符串的房间。

许可

MIT许可证(MIT)。请参阅许可文件以获取更多信息。